package org.ch02.test00.demo08.myWork;

import org.ch02.entity.Staffs;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;

/**
 * 实现从数据库中查询数据，并自动封装到实体类中，如：
 *     public class DbUtil{
 *
 *         // 学过泛型的可以把 Object 改为泛型
 *         public static Object select4Bean(Class<?> beanClass,Map<String,Object> cond){
 *             // 功能实现...
 *         }
 *
 *     }
 *
 *     要求如下：
 *
 *         1、根据参数 beanClass 自动生成查询所有数据的 SQL 语句（上题已实现），
 *
 *         2、cond 为查询条件，需要拼接到查询所有数据的后面，如：
 *             Map<String,Object> cond = new HashMap<>() ;
 *             cond.put("id","1001") ;
 *             cond.put("name","张三") ;
 *
 *             则拼接的 SQL 语句为：select id,name from user where id=? and name=? ;
 *
 *         3、把查询的数据封装到对应的实体对象返回
 * @author CSY
 * @date 2025 - 03 - 19
 */
public class MainTest {
    public static void main(String[] args) throws Exception {
        /*Map<String,Object> map = new HashMap<>();
        Class<?> mapClazz = map.getClass();

        Method putMethod = mapClazz.getMethod("put", Object.class, Object.class);
        putMethod.invoke(map,"id",2);
        putMethod.invoke(map,"name","李四");

        Class<BeanUtil> beanUtilClazz = BeanUtil.class;
        Constructor<BeanUtil> beanUtilConstructor = beanUtilClazz.getConstructor();
        BeanUtil<Staffs> beanUtil = beanUtilConstructor.newInstance();
        //执行获取sql语句的方法 - 反射
        System.out.println(beanUtilClazz.getMethod("select4Bean", Class.class, Map.class).invoke(beanUtil, Staffs.class, map));*/
        String sql = "select * from staffs";
        Connection conn = DbUtil.getConnection();
        ResultSet resultSet = DbUtil.executeQuery(conn,sql);
        while (resultSet.next()) {
            Staffs staff = new Staffs();
            staff.setId(resultSet.getInt("id"));
            staff.setName(resultSet.getString("name"));
            staff.setAge(resultSet.getInt("age"));
        }
        conn.close();
        resultSet.close();


    }
}
